From ca21e61a00c864f707a7d077a23c234b1cf6c41a Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Thu, 11 Aug 2005 21:03:16 +0000 Subject: [PATCH] Support rebooting VMX domains Signed-off-by: Ke Yu Signed-off-by: Arun Sharma --- tools/ioemu/target-i386-dm/helper2.c | 21 ++++++++++++++++++++- tools/ioemu/vl.c | 2 +- tools/ioemu/vl.h | 1 + 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/tools/ioemu/target-i386-dm/helper2.c b/tools/ioemu/target-i386-dm/helper2.c index 732065efa0..361a2bbe9e 100644 --- a/tools/ioemu/target-i386-dm/helper2.c +++ b/tools/ioemu/target-i386-dm/helper2.c @@ -55,6 +55,7 @@ #include "vl.h" shared_iopage_t *shared_page = NULL; +extern int reset_requested; CPUX86State *cpu_86_init(void) { @@ -349,6 +350,10 @@ int main_loop(void) if (shutdown_requested) { break; } + if (reset_requested){ + qemu_system_reset(); + reset_requested = 0; + } } /* Wait up to one seconds. */ @@ -394,13 +399,26 @@ int main_loop(void) return 0; } +static void +qemu_vmx_reset(void *unused) +{ + char cmd[255]; + extern int domid; + + /* pause domain first, to avoid repeated reboot request*/ + xc_domain_pause (xc_handle, domid); + + sprintf(cmd,"xm shutdown -R %d", domid); + system (cmd); +} + CPUState * cpu_init() { CPUX86State *env; cpu_exec_init(); - + qemu_register_reset(qemu_vmx_reset, NULL); env = malloc(sizeof(CPUX86State)); if (!env) return NULL; @@ -427,3 +445,4 @@ cpu_init() return env; } + diff --git a/tools/ioemu/vl.c b/tools/ioemu/vl.c index 51d11476a2..9612adaa2a 100644 --- a/tools/ioemu/vl.c +++ b/tools/ioemu/vl.c @@ -2030,7 +2030,7 @@ typedef struct QEMUResetEntry { } QEMUResetEntry; static QEMUResetEntry *first_reset_entry; -static int reset_requested; +int reset_requested; int shutdown_requested; void qemu_register_reset(QEMUResetHandler *func, void *opaque) diff --git a/tools/ioemu/vl.h b/tools/ioemu/vl.h index c9667ffe8a..1e3f533fcf 100644 --- a/tools/ioemu/vl.h +++ b/tools/ioemu/vl.h @@ -107,6 +107,7 @@ typedef void QEMUResetHandler(void *opaque); void qemu_register_reset(QEMUResetHandler *func, void *opaque); void qemu_system_reset_request(void); +void qemu_system_reset(void); void qemu_system_shutdown_request(void); void main_loop_wait(int timeout); -- 2.30.2